package com.bitoon.basketdudes.web.jpa;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name = "participe", schema = "basket")
@NamedQueries({
    /*
    @NamedQuery(name = "Participe.findAll",
        query = "SELECT p FROM Participe p"),
    @NamedQuery(name = "Participe.findByTemporadaId",
        query = "SELECT p FROM Participe p WHERE p.participePK.temporadaId = :temporadaId"),
    @NamedQuery(name = "Participe.findByEquipoId",
        query = "SELECT p FROM Participe p WHERE p.participePK.equipo.id = :equipoId"),
    @NamedQuery(name = "Participe.findByEstado",
        query = "SELECT p FROM Participe p WHERE p.estado = :estado"),
    @NamedQuery(name = "Participe.findByGanados",
        query = "SELECT p FROM Participe p WHERE p.ganados = :ganados"),
    @NamedQuery(name = "Participe.findByPerdidos",
        query = "SELECT p FROM Participe p WHERE p.perdidos = :perdidos"),
    @NamedQuery(name = "Participe.findByFavor",
        query = "SELECT p FROM Participe p WHERE p.favor = :favor"),
    @NamedQuery(name = "Participe.findByContra",
        query = "SELECT p FROM Participe p WHERE p.contra = :contra"),
     *
     */
    @NamedQuery(name = "Participe.findByEquipoIdTemporadaId",
        query = "SELECT p FROM Participe p WHERE p.participePK.equipoId = :idEquipo "
        + "AND p.participePK.temporadaId = :idTemporada"),
    @NamedQuery(name = "Participe.findByTemporadaIdEstado",
        query = "SELECT p FROM Participe p WHERE p.participePK.temporadaId = :temporadaId "
        + "AND estado = :estado"),
    @NamedQuery(name = "Participe.findByTemporadaIdActivosOExpulsados",
        query = "SELECT p FROM Participe p WHERE p.participePK.temporadaId = :temporadaId "
        + " AND (estado = 1 OR estado = 11 OR estado = 13)"),
    @NamedQuery(name = "Participe.clasificacionTemporada",
        query = "SELECT p FROM Participe p WHERE p.participePK.temporadaId = :temporadaId "
        + "ORDER BY estado ASC, puntos DESC, (favor-contra) DESC, favor DESC, equipo.id ASC"),
    @NamedQuery(name = "Participe.findByUsuarioId",
        query = "SELECT p FROM Participe p WHERE p.equipo.usuario.id = :idUsuario "
        + "ORDER BY p.temporada.id"),
    @NamedQuery(name = "Participe.findByUsuarioIdTemporadaId",
        query = "SELECT p FROM Participe p WHERE p.equipo.usuario.id = :idUsuario AND p.temporada.id = :idTemporada"),
    @NamedQuery(name = "Participe.findByUsuarioIdTemporadaIdEstado",
        query = "SELECT p FROM Participe p WHERE p.equipo.usuario.id = :idUsuario AND p.temporada.id = :idTemporada AND estado = :estado"),
    @NamedQuery(name = "Participe.torneosApuntado",
        query = "SELECT p FROM Participe p WHERE p.equipo.usuario.id = :idUsuario "
        + "AND (p.temporada.estado = 1 OR p.temporada.estado = 2) ORDER BY p.temporada.id"),
    @NamedQuery(name = "Participe.findByEquipoId",
        query = "SELECT p FROM Participe p WHERE p.equipo.id = :idEquipo "
        + "ORDER BY p.temporada.id")
})
public class Participe implements Serializable {
    private static final long serialVersionUID = 1L;

    // Estados de PARTICIPE

    public static final int APUNTADO_Y_PENDIENTE_ACEPTACION = 0;
    public static final int APUNTADO_Y_ACEPTADO = 1;

    @EmbeddedId
    protected ParticipePK participePK;
    @Column(name = "estado")
    private Short estado;
    @Column(name = "ganados")
    private Short ganados;
    @Column(name = "perdidos")
    private Short perdidos;
    @Column(name = "favor")
    private Integer favor;
    @Column(name = "contra")
    private Integer contra;
    @Column(name = "puntos")
    private Integer puntos;

    @JoinColumn(name = "temporada_id", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Temporada temporada;
    @JoinColumn(name = "equipo_id", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Equipo equipo;

    public Participe() {
    }

    public Participe(ParticipePK participePK) {
        this.participePK = participePK;
    }

    public Participe(int temporadaId, int equipoId) {
        this.participePK = new ParticipePK(temporadaId, equipoId);
    }

    public ParticipePK getParticipePK() {
        return participePK;
    }

    public void setParticipePK(ParticipePK participePK) {
        this.participePK = participePK;
    }

    public Short getEstado() {
        return estado;
    }

    public void setEstado(Short estado) {
        this.estado = estado;
    }

    public Short getGanados() {
        return ganados;
    }

    public void setGanados(Short ganados) {
        this.ganados = ganados;
    }

    public Short getPerdidos() {
        return perdidos;
    }

    public void setPerdidos(Short perdidos) {
        this.perdidos = perdidos;
    }

    public Integer getFavor() {
        return favor;
    }

    public void setFavor(Integer favor) {
        this.favor = favor;
    }

    public Integer getContra() {
        return contra;
    }

    public void setContra(Integer contra) {
        this.contra = contra;
    }

    public Temporada getTemporada() {
        return temporada;
    }

    public void setTemporada(Temporada temporada) {
        this.temporada = temporada;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (participePK != null ? participePK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Participe)) {
            return false;
        }
        Participe other = (Participe) object;
        if ((this.participePK == null && other.participePK != null) || (this.participePK != null && !this.participePK.equals(other.participePK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.bitoon.basketdudes.web.jpa.Participe[participePK=" + participePK + "]";
    }

    public Equipo getEquipo() {
        return equipo;
    }

    public void setEquipo(Equipo equipo) {
        this.equipo = equipo;
    }

    public Integer getPuntos() {
        return puntos;
    }

    public void setPuntos(Integer puntos) {
        this.puntos = puntos;
    }

}
